﻿using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Text;
using com.clinica.business.BE.actplansalud;
using com.clinica.business.BL.interfaces.actplansalud;
using com.clinica.DL.sql.actplansalud;
using com.clinica.business.entities;
using System.Configuration;
using com.clinica.DL.sql.comun;
using com.clinica.business.BE.comun;
using System.Xml;
/****************************************************************************************
 * Sistema    : Sistema de Gestión de Clinica
 * Modulo     : Facturación y Presupuestos
 * Descripción: 
 * Autor      : JPEREZ
 * Fecha      : 2011-06-01
 ****************************************************************************************/

namespace com.clinica.business.BL.actplansalud
{
    [ServiceBehavior(Name = "PlanSaludBL",
 Namespace = "http://com.clinica.business.BL.interfaces.actplansalud",
 ConcurrencyMode = ConcurrencyMode.Multiple,
 InstanceContextMode = InstanceContextMode.PerSession,
 IncludeExceptionDetailInFaults = true)]
    public class PlanSaludBL: IPlanSaludBL
    {

        #region IPlanSaludBL Members

        public List<com.clinica.business.BE.comun.ParametrosBE> ObternerTipoDocumento(com.clinica.business.BE.comun.ParametrosBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<ParametrosBE> lstResult = new List<ParametrosBE>();
            try
            {
                lstResult = ParametrosDL.ObtenerTabla(request);
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return lstResult;
        }
        #endregion

        #region IPlanSaludBL Members

        public List<PlanSaludBE> ObtenerListaPlanSalud(PlanSaludBE request, DateTime dtFecha_Inicio, DateTime dtFecha_Fin)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<PlanSaludBE> lstReturn = new List<PlanSaludBE>();
            try
            {
                lstReturn = PlanSaludDL.ObtenerSolicitudPlanSalud(request, dtFecha_Inicio, dtFecha_Fin);
                foreach (PlanSaludBE item in lstReturn)
                {
                    if (item.Fecha != null)
                        item.FechaVista = item.Fecha.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstReturn;
        }

        #endregion

        #region IPlanSaludBL Members


        public List<CiaSeguroBE> ObternerCiaSeguros(CiaSeguroBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<CiaSeguroBE> lstReturn = new List<CiaSeguroBE>();
            try
            {
                lstReturn = CiaSeguroDL.ObtenerCiaSeguro(request);
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return lstReturn;
        }

        public List<EmpresaBE> ObternerEmpresa(EmpresaBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<EmpresaBE> lstReturn = new List<EmpresaBE>();
            try
            {
                lstReturn = EmpresaDL.ObtenerEmpresa(request);
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return lstReturn;
        }

        public List<PlanSaludBE> ObternerPlanSaludOrigen(PlanSaludBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<PlanSaludBE> lstReturn = new List<PlanSaludBE>();
            try
            {
                lstReturn = PlanSaludDL.ObtenerSolicitudPlanSaludOrigen(request);
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return lstReturn;
        }
        public List<PlanSaludBE> ObtenerSolicitudPlanSalud(PlanSaludBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<PlanSaludBE> lstReturn = new List<PlanSaludBE>();
            try
            {
                lstReturn = PlanSaludDL.ObtenerSolicitudPlansalud(request);
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return lstReturn;
        }
        public int GuardarPlanSalud(int accion, List<PlanSaludBE> request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            int Resultado = 0;
            List<PlanSaludBE> lst = new List<PlanSaludBE>();
            try
            {
                XmlDocument doc = new XmlDocument();
                XmlNode root = doc.CreateElement("PlanSalud");
                doc.AppendChild(root);
                foreach (PlanSaludBE item in request)
                {
                    #region insercion/ actualizacion en sql del Detalle
                    try
                    {
                        XmlElement newElem = doc.CreateElement("Registro");
                        #region Cabecera
                        newElem.SetAttribute("Fecha", item.Fecha.ToString("yyyyMMdd"));
                        newElem.SetAttribute("Descripcion", item.Descripcion);
                        newElem.SetAttribute("Factor", item.Factor.ToString());
                        newElem.SetAttribute("Observaciones", item.Observaciones);
                        newElem.SetAttribute("CodigoPlanSalud", item.CodigoPlanSalud.ToString());
                        newElem.SetAttribute("CodigoEstado", item.CodigoEstado.ToString());
                        newElem.SetAttribute("CodigoCia", item.CodigoAseguradora.ToString());
                        newElem.SetAttribute("CodigoEmpresa", item.CodigoEmpresa.ToString());
                        #endregion
                        #region Detalle
                        newElem.SetAttribute("TipoSolicitud", item.TipoSolicitud.ToString());
                        newElem.SetAttribute("NumeroSolicitud", item.NumeroSolicitud.ToString());
                        newElem.SetAttribute("CodigoServicio", item.CodigoServicio.ToString());
                        newElem.SetAttribute("ValorCalculo", item.ValorCalculo.ToString());
                        newElem.SetAttribute("TipoCalculo", item.TipoCalculo.ToString());
                        newElem.SetAttribute("ValorDescuento", item.ValorDescuento.ToString());
                        #endregion
                        doc.DocumentElement.AppendChild(newElem);
                    }
                    catch (Exception e)
                    {

                    }
                    #endregion
                }
                lst = PlanSaludDL.ActualizarPlanSalud(accion, doc.InnerXml);
                foreach (PlanSaludBE item in lst)
                {
                    Resultado = item.NumeroSolicitud;
                    break;
                }
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return Resultado;
        }
        #endregion

        #region IPlanSaludBL Members


        public List<PlanSaludBE> ObtenerListaXEstadoPlanSalud(PlanSaludBE request, DateTime dtFecha_Inicio, DateTime dtFecha_Fin)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<PlanSaludBE> lstReturn = new List<PlanSaludBE>();
            try
            {
                lstReturn = PlanSaludDL.ObtenerSolicitudXEstadoPlanSalud(request, dtFecha_Inicio, dtFecha_Fin);
                foreach (PlanSaludBE item in lstReturn)
                {
                    if (item.Fecha != null)
                        item.FechaVista = item.Fecha.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstReturn;
        }

        #endregion

        #region IPlanSaludBL Members


        public int AprobarPlanSalud(PlanSaludBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            int result =0;
            List<PlanSaludBE> lstReturn = new List<PlanSaludBE>();
            try
            {
                lstReturn = PlanSaludDL.ActualizarEstadoPlanSalud(request);
                foreach (PlanSaludBE item in lstReturn)
                {
                    result = item.NumeroSolicitud;
                }
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return result;
        }


        public int AnularPlanSalud(PlanSaludBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            int result = 0;
            List<PlanSaludBE> lstReturn = new List<PlanSaludBE>();
            try
            {
                PlanSaludDL.AnularPlanSalud(request);
             
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return result;
        }

        #endregion


        #region IPlanSaludBL Members


        public int GenerarPlanSalud(PlanSaludBE request,int accion)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            int result = 0;
            List<PlanSaludBE> lstReturn = new List<PlanSaludBE>();
            try
            {
                lstReturn = PlanSaludDL.AprobarPlanSalud(request,accion);
                foreach (PlanSaludBE item in lstReturn)
                {
                    result = item.NumeroSolicitud;
                }
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return result; 
        }

        public List<PlanSaludBE> ObtenerListaPendientePlanSalud(PlanSaludBE request, DateTime dtFecha_Inicio, DateTime dtFecha_Fin)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<PlanSaludBE> lstReturn = new List<PlanSaludBE>();
            try
            {
                lstReturn = PlanSaludDL.ObtenerSolicitudPendientesPlanSalud(request, dtFecha_Inicio, dtFecha_Fin);
                foreach (PlanSaludBE item in lstReturn)
                {
                    if (item.Fecha != null)
                        item.FechaVista = item.Fecha.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstReturn;
        }

        #endregion



        #region Miembros de IPlanSaludBL


        int IPlanSaludBL.RechazarPlanSalud(PlanSaludBE request)
        {
            int result = 0;

            try
            {
                PlanSaludDL.RechazarPlanSalud(request);

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return result;
        }

        #endregion

        #region IPlanSaludBL Members


        public List<PlanSaludBE> CargarPlanSaludConsulta(PlanSaludBE request)
        {
            List<PlanSaludBE> lstReturn = new List<PlanSaludBE>();
            try
            {
                    lstReturn = PlanSaludDL.ObtenerPlanSaludConsulta(request);
                foreach (PlanSaludBE item in lstReturn)
                {
                    if (item.Fecha != null)
                        item.FechaVista = item.Fecha.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstReturn;
        }

        #endregion

        #region IPlanSaludBL Members


        public List<PlanSaludBE> ObtenerPlanSaludConsulta(PlanSaludBE request, DateTime dtFecha_Inicio, DateTime dtFecha_Fin)
        {
            List<PlanSaludBE> lstReturn = new List<PlanSaludBE>();
            try
            {
                lstReturn = PlanSaludDL.ObtenerPlanSalud(request, dtFecha_Inicio, dtFecha_Fin);
                foreach (PlanSaludBE item in lstReturn)
                {
                    if (item.Fecha != null)
                        item.FechaVista = item.Fecha.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstReturn;
        }

        #endregion


    }
}
